<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- react 分为 react-dom页面开发和  react--native app开发 所有功能要拆分 -->
    <!-- react核心包,提供了操作react的所有必要功能, 但是不提供Dom操作的相关功能, web和app都使用 -->
    <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
    <!-- reactDOM, 提供支持操作dom的相关功能 -->
    <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
    <!-- 添加后可直接使用jsx语法 -->
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head>

<body>
    <div id="root">

    </div>
    <script type="text/babel">
        const msg = 'hello world';
        const reactRoot = ReactDOM.createRoot(document.getElementById('root'))

        // 常见错误写法+++++++++
        // 不能再jsx中定义变量
        // for或if语句没有结果,不能嵌入jsx中
        // const list = <ul>
        //     if(true){
        //         <div>1111</div>
        //     } else {
        //         <div>2222</div>
        //     }
        // </ul>
        // const list = <ul>
        //     for(let i=0; i < 10; i++){
        //         <li>{i}</li>
        //     }
        // </ul>
        // reactRoot.render(
        //     <React.Fragment>
        //         {list}
        //     </React.Fragment>
        // )

        // 大部分对象不能直接在jsx助攻直接使用
        // const aa  =  <div>{ new Date()}</div>
        //  匿名函数和箭头函数 无法直接嵌套在jsx中定义 但是可以调用获取返回值
        // jsx中直接调用函数 真确值有 字符串 null undefined jsx对象  jsx数组
        // const aa  =  <div>{ ()=> 2}</div>
        // const aa  =  <div>{ functionName }</div>

        // 判断 使用三元表达式 和 利用路基运算符的短路现象
        const ele = <div>{1 > 0 ? 10 : 20}</div>
        let d1 = true, d2 = false;
        const ele1 = <div>{d1 && msg}</div>
        const ele2 = <div>{d1 && <p>哈哈哈true</p>}</div>
        const ele3 = <div>{d2 && <p>哈哈哈false</p>}</div>
        // 错误方式
        // const ele4 = <div>{ d2 } && {<p>哈哈哈false</p>}</div>

        // 使用map实现便利
        const user = {
            name: 'chengchao',
            age: 20
        }
        const vdom = <ul>{
            Object.keys(user).map(item=> {
                return <li key={item}>{item}: {user[item]}</li>
            })
        }</ul>

        // 没有特殊结构的表达, 或执行有正确结果的函数 

        // function tick() {
        //     const element = (
        //         <div>
        //             <h1>Hello, world!</h1>
        //             <h2>It is {new Date().toLocaleTimeString()}.</h2>
        //         </div>
        //     );
        //     reactRoot.render(element);
        // }
        // setInterval(tick, 1000);
        reactRoot.render(
            <React.Fragment>
                {ele2}
                {ele3}
                {vdom}
            </React.Fragment>
        )
    </script>
</body>

</html>